import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { AppDataSource } from './database/data-source';
import { seedOperationTypes } from './operation-types/operation-types.seed';

// 颜色代码
const colors = {
  reset: '\x1b[0m',
  bright: '\x1b[1m',
  green: '\x1b[32m',
  red: '\x1b[31m',
  yellow: '\x1b[33m',
  blue: '\x1b[34m',
  cyan: '\x1b[36m'
};

// 格式化输出
function logMessage(color: string, message: string, emoji?: string) {
  const timestamp = new Date().toLocaleTimeString('zh-CN');
  const emojiStr = emoji ? `${emoji}  ` : '';
  console.log(`${colors.bright}${color}[${timestamp}]${colors.reset} ${emojiStr}${message}`);
}

async function checkDatabaseConnection() {
  try {
    logMessage(colors.cyan, '正在连接数据库...', '🔌');
    
    await AppDataSource.initialize();
    logMessage(colors.green, '数据库连接成功!', '✅');
    
    return true;
  } catch (error) {
    logMessage(colors.red, `数据库连接失败: ${error.message}`, '❌');
    logMessage(colors.yellow, '请检查: 1. MySQL服务是否启动 2. 数据库配置是否正确', '💡');
    return false;
  }
}

async function startServer() {
  try {
    const port = process.env.PORT ? parseInt(process.env.PORT) : 3000;
    
    logMessage(colors.cyan, '正在启动后端服务...', '🚀');
    
    const app = await NestFactory.create(AppModule);
    
    // 添加全局 API 前缀
    app.setGlobalPrefix('api');

    // 启用CORS支持
    app.enableCors({
      origin: true, // 允许所有来源
      methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS', 'PATCH'],
      allowedHeaders: ['Content-Type', 'Authorization', 'Accept'],
      credentials: true,
    });
    
    await app.listen(port);
    
    logMessage(colors.green, '后端服务启动成功!', '🎉');
    logMessage(colors.blue, `服务地址: http://localhost:${port}`, '🌐');
    logMessage(colors.green, `健康检查: http://localhost:${port}/`, '🩺');
    
    return true;
  } catch (error) {
    logMessage(colors.red, `服务启动失败: ${error.message}`, '❌');
    return false;
  }
}

async function bootstrap() {
  console.log('\n' + '='.repeat(60));
  logMessage(colors.bright, '工厂计时器后端服务启动中...', '⚙️');
  console.log('='.repeat(60) + '\n');
  
  // 检查数据库连接
  const dbConnected = await checkDatabaseConnection();
  if (!dbConnected) {
    logMessage(colors.red, '启动中止: 数据库连接失败', '🛑');
    process.exit(1);
  }

  // 初始化操作类型数据
  try {
    logMessage(colors.cyan, '正在初始化操作类型数据...', '📊');
    await seedOperationTypes(AppDataSource);
    logMessage(colors.green, '操作类型数据初始化完成!', '✅');
  } catch (error) {
    logMessage(colors.yellow, `操作类型数据初始化警告: ${error.message}`, '⚠️');
  }
  
  // 启动服务器
  const serverStarted = await startServer();
  if (!serverStarted) {
    logMessage(colors.red, '启动中止: 服务启动失败', '🛑');
    process.exit(1);
  }
  
  console.log('\n' + '='.repeat(60));
  logMessage(colors.green, '系统启动完成! 所有服务正常运行', '🎯');
  console.log('='.repeat(60));
}

bootstrap().catch(error => {
  logMessage(colors.red, `启动过程发生未知错误: ${error.message}`, '💥');
  process.exit(1);
});